package com.kty.utils;

import java.util.Scanner;

/**
 * 工具类
 */
public class Method {

    private static final Scanner scanner = new Scanner(System.in);

    /**
     * 用于界面菜单的选择。该方法读取键盘，如果用户键入 '1'-'3' 中的任意字符，则方法返回。返回值为用户键入字符
     */
    public static char readCharTest3() {

        char c;
        for (; ; ) {
            String str = readKeyBoard(1, false);
            c = str.charAt(0);
            if (c != '1' && c != '2' && c != '3') {
                System.out.print("选择错误，请重新输入：");
            } else break;
        }
        return c;
    }


    /**
     * 从键盘读取一个长度不超过limit位的整数，并将其作为方法的返回值。
     *
     * @param limit
     */
    public static int readInt(int limit) {

        int n;
        for (; ; ) {
            String str = readKeyBoard(limit, false);
            try {
                n = Integer.parseInt(str);
                break;
            } catch (Exception e) {
                System.out.print("数字输入错误，请重新输入：");
            }
        }
        return n;

    }


    /**
     * 用于确认选择的输入。该方法从键盘读取‘Y’或’N’，并将其作为方法的返回值
     */
    public static char readYorN() {
        char c;

        for (; ; ) {
            String str = readKeyBoard(1, false).toUpperCase();
            c = str.charAt(0);
            if (c == 'Y' || c == 'N') {
                break;
            } else {
                System.out.print("选择错误，请重新输入：");
            }
        }
        return c;
    }


    /**
     * 用于用户输入是否正确
     */
    private static String readKeyBoard(int limit, boolean blankReturn) {
        String line = "";

        while (scanner.hasNextLine()) {
            line = scanner.nextLine();
            if (line.length() == 0) {
                if (blankReturn) {
                    return line;
                } else {
                    continue;
                }
            }
            if (line.length() > limit) {
                System.out.print("输入长度（不大于" + limit + "）错误，请重新输入：");
                continue;
            }
            break;
        }
        return line;
    }


}